// import { WechatyBuilder, ScanStatus } from 'wechaty'
// console.log(WechatyBuilder)
const { WechatyBuilder, ScanStatus } = require('wechaty')
// console.log(WechatyBuilder, ScanStatus, Wechaty)
class Bot {
  constructor () {
    this.wxbot = WechatyBuilder.build({name: 'wxbot'})
    this.wxbot
      .on('scan', this.onScan)
      .on('login', this.onLogin)
      .on('logout', this.onLogout)
      .on('error', this.onError)
      .on('message', this.onMessage)
      .on('heartbeat', this.onHeartbeat)
      .on('friendship', this.onFriendship)
      .on('ready', this.onReady)
      .on('room-join', this.onRoomJoin)
      .on('room-topic', this.onRoomTopic)
      .on('room-leave', this.onRoomLeave)
      .on('room-invite', this.onRoomInvite)
  }
  // 启动机器人
  async start () {
    this.wxbot && await this.wxbot.start()
  }
  // 停止机器人
  async stop () {
    this.wxbot && await this.wxbot.stop()
  }
  // 登出机器人
  async logout () {
    this.wxbot && await this.wxbot.logout()
  }
  // 获取机器人logon/logoff 的状态
  async logonoff () {
    if (this.wxbot && this.wxbot.logonoff()) { // 已登录
      console.log('Bot logined')
      return true
    } else { // 未登录
      console.log('Bot not logined')
      return false
    }
  }
  // 获取当前机器人的所有信息
  async userSelf () {
    if (this.wxbot) {
      return this.wxbot.userSelf()
    }
    return null
  }
  // 机器人自己给自己发消息
  async say (textOrContactOrFileOrUrl) {
    this.wxbot && await this.wxbot.say(textOrContactOrFileOrUrl)
  }

  async onMessage (message) {
    console.log(`收到消息: ${message}`)
    const from = message.from()// 获取发送消息的联系人
    const to = message.to()// 获取消息发送的联系人
    const room = message.room()// 获取消息所在的微信群，如果这条消息不在微信群中，会返回null
    const text = message.text()// 获取消息的文本内容
    const type = message.type()
    const self = message.self()// 查看这条消息是否为机器人发送的 true false
    const contactList = await message.mention()// 获取在群中@的用户列表。
    // console.log(contactList)
    const mentionSelf = await message.mentionSelf()// 获取机器人是否在群里被@ 了 true false
    const date = message.date()// 消息发送的时间
    const age = message.age()// 消息的时差
    const fileBox = await message.toFileBox()// 从消息中提取多媒体文件并把它 存入到FileBox 里面。
    const contact = await message.toContact()// 提取转发的微信好友名片内容，并封装成Contact 类型。
    console.log(from, to, room, text, type, self, contactList, mentionSelf, date, age, fileBox, contact)
    if (room) {
      if (mentionSelf) {
        console.log('有人@我')
      }
    } else {

    }
  }
  async onLogout (user) {
    console.log(`用户 ${user} 退出成功`)
  }
  async onLogin (user) {
    console.log(`用户 ${user} 登录成功`)
  }
  async onError (e) {
    console.error(e)
  }
  async onScan (code, status) {
    // status: 2代表链接等待调用，3代表链接已打开，这个链接实际上是提供一个登录的二维码供扫描
    console.log(code, status)
    if (status === ScanStatus.Waiting) {
      // status: 2代表等待，3代表扫码完成
      // qrcode.generate(code, {
      //   small: true
      // }, console.log)
    }
  }
  async onHeartbeat (e) {
    console.log(e)
  }
  async onFriendship (e) {
    console.log(e)
  }
  async onReady (e) {
    console.log(e)
  }
  async onRoomJoin (e) {
    console.log(e)
  }
  async onRoomTopic (e) {
    console.log(e)
  }
  async onRoomLeave (e) {
    console.log(e)
  }
  async onRoomInvite (e) {
    console.log(e)
  }
}
export default Bot
// new Bot().start();
